iT邦幫忙

2023 iThome 鐵人賽

DAY 5
1

昨天把Github Action連動好AWS Lambda了,今天來補上Codecov和SonarCloud~

SonarCloud

SonarCloud 是一個程式碼品質管理平台,專注於靜態程式碼分析。它的目標是幫助開發團隊發現、追蹤和修復程式碼中的問題。

先去這裡辦好帳號,透過github sso登入sonarcloud,將sonarcloud連動自己的github帳號

接著右上角->My Account->按到Security頁面->打上Token Name->按下Generate
https://ithelp.ithome.com.tw/upload/images/20230920/20115990TZqOMF9E1N.png

然後打開Github,跟昨天加入AWS Key一樣的方式來把Sonar的Token加入Project的Action secrets
https://ithelp.ithome.com.tw/upload/images/20230920/20115990TAW8QgHWee.png
接下來就可以回到SonarCloud,來去連動專案,按下"+" -> Analyze new project -> 找到自己的專案打勾就沒問題了~(要記得把自己的專案必須是公開的,private projects要使用得另外買)
https://ithelp.ithome.com.tw/upload/images/20230920/20115990hUQaQp8JIG.png
選好自己的專案,就沒問題了~
https://ithelp.ithome.com.tw/upload/images/20230920/201159909sCyvTBve9.png

最後一步,再專案根目錄下開一個名叫sonar-project.properties的檔案,這是一個用來配置 SonarCloud的設定檔,可以參考以下範例使用:

# 指定專案的唯一識別碼。這個值在 SonarCloud 上用來識別不同的專案。
sonar.projectKey=onepiece010938_Line2GoogleDriveBot
# 指定專案所屬的組織(這裡就是自己)
sonar.organization=onepiece010938

# 這是在 SonarCloud UI 中顯示的專案名稱和版本。
sonar.projectName=Line2GoogleDriveBot
sonar.projectVersion=1.0

# 指定要進行程式碼分析的源代碼路徑。這個參數設置為 "." 表示在配置檔所在的目錄中查找源代碼。(在 Windows 上要將 "\" 替換為 "/")
sonar.sources=.
# 指定要排除在程式碼分析之外的檔案或目錄。這些通常是測試檔案、依賴庫或測試數據。
sonar.exclusions=**/*_test.go,**/vendor/**,**/testdata/*

# 指定測試代碼的路徑,這個設置與 sonar.sources 類似,但用於測試代碼。
sonar.tests=.
# 指定要包含在測試分析中的檔案模式。這裡包括所有以 "_test.go" 結尾的檔案。
sonar.test.inclusions=**/*_test.go
# 指定要排除在測試分析之外的檔案或目錄,通常是依賴庫。
sonar.test.exclusions=**/vendor/**
# 指定源代碼的編碼方式,這裡設置為 UTF-8。(默認值是系統的默認編碼方式。)
sonar.sourceEncoding=UTF-8
# 指定測試覆蓋率報告的路徑,報告位於 coverage.out
sonar.go.coverage.reportPaths=coverage.out
# 指定測試報告的路徑。報告位於 report.json
sonar.go.tests.reportPaths=report.json
# 指定 golangci-lint 生成的報告的路徑
sonar.go.golint.reportPaths=golangci-lint.out

Codecov

Codecov 是一個測試覆蓋率報告工具,它幫助您評估測試的全面性。通過測試覆蓋率,您可以確保您的測試套件足夠涵蓋您的程式碼,並識別需要進一步測試的區域。(by GPT)

Codecov比較簡單,其實跟sonar前面是一樣的步驟,先去這裡連動github然後拿token,再放到secret裡面就好了~
https://ithelp.ithome.com.tw/upload/images/20230920/20115990M6hBF63RQH.png

更新aws-lambda.yml

接著回到昨天action的yml檔(aws-lambda.yml),在Go-Test的step後面補上新的step,讓action跟他們連動

- name: Run testing # 運行Go測試,生成測試覆蓋率報告
        run: go test -v ./... -race -coverprofile=coverage.out -covermode=atomic -json > report.json

- name: Upload coverage to Codecov # 上傳測試覆蓋率報告到Codecov
  uses: codecov/codecov-action@v3
  with:
    token: ${{ secrets.CODECOV_TOKEN }}

- name: SonarCloud Scan  # 執行SonarCloud掃描,用於代碼質量檢查
  uses: SonarSource/sonarcloud-github-action@master
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}  # Needed to get PR information, if any
    SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

另外Codecov和SonarCloud都提供很多badges可以放在README上,讓你可以很清楚看到目前專案的狀態,可以參考這邊替換成自己的帳號和專案名稱

[![Build and test Go & Deploy to Lambda](https://github.com/[YOUR_ACCOUNT]/[YOUR_PROJECT_NAME]/actions/workflows/aws-lambda.yml/badge.svg)](https://github.com/[YOUR_ACCOUNT]/[YOUR_PROJECT_NAME]/actions/workflows/aws-lambda.yml)  
[![codecov](https://codecov.io/gh/[YOUR_ACCOUNT]/[YOUR_PROJECT_NAME]/branch/main/graph/badge.svg?token=A7U6ZS7OI5)](https://codecov.io/gh/[YOUR_ACCOUNT]/[YOUR_PROJECT_NAME])


[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME]&metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME])
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME]&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME])
[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME]&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME])
[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME]&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME])
[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME]&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME])
[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME]&metric=bugs)](https://sonarcloud.io/summary/new_code?id=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME])
[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME]&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME])
[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME]&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME])
[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME]&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME])
[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME]&metric=ncloc)](https://sonarcloud.io/summary/new_code?id=[YOUR_ACCOUNT]_[YOUR_PROJECT_NAME])

效果會像下面這樣
https://ithelp.ithome.com.tw/upload/images/20230920/20115990ALcvkUyWkL.jpg

那麼今天就到這邊,讓我們明天再見:)


上一篇
Day04 加上Github Action
下一篇
Day06 啟用Google Drive API
系列文
Golang LineBot X GoogleDrive:LINE有各種限制!? 那就丟上Drive吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言